package com.mydemo.utils;

import com.mydemo.dto.FileUploadRequest;

public class Prompt {

    /**
     * 构建发送给AI的提示词
     * <p>
     * 根据文件内容和用户的生成要求，构建一份完整的提示词，用于指导AI模型生成符合要求的习题
     * 提示词包含文件内容和各种生成参数（题目类型、数量、难度等）
     *
     * @param content 从文件中提取的文本内容，作为习题生成的知识来源
     * @param request 文件上传请求对象，包含用户的生成要求
     * @return 构建好的完整提示词字符串
     */
    public static String buildPrompt(String content, FileUploadRequest request) {
        StringBuilder promptBuilder = new StringBuilder();
        promptBuilder.append("##你是一个智能出题助手，你要严谨认真子的的理解需求，以及文件内容，然后根据题目生成要求，生成一份试卷的题目信息##\n");
        promptBuilder.append("根据以下内容生成一份试卷：\n\n");
        promptBuilder.append("### 文件内容 ###\n");
        promptBuilder.append(content).append("\n\n");
        promptBuilder.append("### 生成要求 ###\n");

        // 添加题目类型要求
        if (request.getQuestionTypes() != null && !request.getQuestionTypes().isEmpty()) {
            promptBuilder.append("包含题型：").append(String.join("、", request.getQuestionTypes())).append("\n");
        }

        // 添加各类题目数量要求
        if (request.getSingleChoiceCount() != null && request.getSingleChoiceCount() > 0) {
            promptBuilder.append("单选题数量：").append(request.getSingleChoiceCount()).append("\n");
        }
        if (request.getMultipleChoiceCount() != null && request.getMultipleChoiceCount() > 0) {
            promptBuilder.append("多选题数量：").append(request.getMultipleChoiceCount()).append("\n");
        }
        if (request.getTrueFalseCount() != null && request.getTrueFalseCount() > 0) {
            promptBuilder.append("判断题数量：").append(request.getTrueFalseCount()).append("\n");
        }


        // 添加难度要求
        // if (request.getDifficulty() != null && !request.getDifficulty().isEmpty()) {
        //     promptBuilder.append("题目难度：").append(request.getDifficulty()).append("\n");
        // }

        // 添加输出格式要求
        promptBuilder.append("\n请按照以下JSON格式输出：\n");
        // promptBuilder.append("{\n");
        // promptBuilder.append("  \"topics\": [\n");
        promptBuilder.append("[\n");
        promptBuilder.append("    {\n");
        promptBuilder.append("      \"topicContent\": \"题目内容,500字以内\",\n");
        promptBuilder.append("      \"topicType\": \"题目类型（单选/多选/判断），单选题使用 single ,多选题使用 multiple,判断题使用 judge\",\n");
        // promptBuilder.append("      \"difficulty\": \"难度\",\n");
        promptBuilder.append("      \"topicKnowledgeTags\": \"题目知识点标签，简短的几个字描述，多个标间用英文逗号分割，最多不能超过5个，总字数在100以内\",\n");
        promptBuilder.append("      \"topicOptions\": [\n");
        promptBuilder.append("        {\n");
        promptBuilder.append("          \"option\": \"选项标识（如A、B、C等，单选题有 A、B、C、D 四个选项，多选题最多有A、B、C、D、E、F 六个选项，最少有 A、B、C、D 四个选项，判断题只有有 A、B 两个选项，一个是正确的选项内容，一个是错误的选项内容)\",\n");
        promptBuilder.append("          \"content\": \"选项内容，200字以内\",\n");
        // promptBuilder.append("          \"isCorrect\": true/false\n");
        promptBuilder.append("        }\n");
        promptBuilder.append("      ],\n");
        promptBuilder.append("      \"topicAnswer\": \"正确答案，多选题用英文逗号连接，判断题返回正确的那个选项 A 或 B \",\n");
        promptBuilder.append("      \"topicAnalysis\": \"答案解析，对题目的解析，以及选项的解析，字数现在在1000字以内\",\n");
        // promptBuilder.append("      \"wrongOptionsAnalysis\": \"错误选项分析\"\n");
        promptBuilder.append("    }\n");
        promptBuilder.append("  ]");
        // promptBuilder.append("  ]\n");
        // promptBuilder.append("}");

        return promptBuilder.toString();
    }
}
